<?php
declare (strict_types = 1);
namespace app\common\middleware;

class Check
{
	public function handle($request, \Closure $next)
	{
		// 预定义返回数据
		$api_res = [
			'status' => 0,
			'err_msg' => '',
			'data' => null
		];
		// 将预定义返回数据添加至请求对象
		$request->api_res = $api_res;

		// 请求数据兼容性处理，若上传了文件，则追加进请求参数中
		$request_params = $request->param();
		if( $request->file() )
		{
			$request_params = array_merge($request_params, $request->file());
		}

		// 获取应用、模块、操作
		$app = app('http')->getName();
		$controller = $request->controller();
		$action = $request->action();
		// 转换“.”为“\”，兼容多层控制器的命名空间
		$controller = str_replace('.', '\\', $controller);
		// 验证器命名空间
		$validate_class = [
			'app',
			$app,
			'validate',
			$controller,
			$action
		];
		$validate_class = implode('\\', $validate_class);
		// 若类存在则加载验证器
		if( class_exists($validate_class) )
		{
			$validate = new $validate_class;
			if( !$validate->check($request_params) )
			{
				$api_res['err_msg'] = $validate->getError();
				return json($api_res);
			}
		}

		return $next($request);
	}


}
